package com.mjk.manager.magicapi.core.core.model;


import java.util.ArrayList;
import java.util.Objects;

/**
 * 参数、header、path的基础信息
 *
 * @author mxd
 */
public class BaseDefinition {
    /**
     * 名
     */
    private String name;

    /**
     * 值
     */
    private Object value;

    /**
     * 描述
     */
    private String description;

    /**
     * 是否必填
     */
    private boolean required;

    /**
     * 数据类型
     */
    private DataType dataType;

    /**
     * 类型，函数专用
     */
    private String type;

    /**
     * 默认值
     */
    private String defaultValue;

    /**
     * 验证类型
     */
    private String validateType;

    /**
     * 验证说明
     */
    private String error;

    /**
     * 验证表达式
     */
    private String expression;

    /**
     * @Description 子集，数据类型为对象或数组时有数据
     */
    private ArrayList<BaseDefinition> children;

    public BaseDefinition() {
    }

    public BaseDefinition(String name, String value) {
        this.name = name;
        this.value = value;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Object getValue() {
        return value;
    }

    public void setValue(Object value) {
        this.value = value;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public boolean isRequired() {
        return required;
    }

    public void setRequired(boolean required) {
        this.required = required;
    }

    public DataType getDataType() {
        return dataType == null ? DataType.String : dataType;
    }

    public void setDataType(DataType dataType) {
        this.dataType = dataType;
    }

    public String getDefaultValue() {
        return defaultValue;
    }

    public void setDefaultValue(String defaultValue) {
        this.defaultValue = defaultValue;
    }

    public String getValidateType() {
        return validateType;
    }

    public void setValidateType(String validateType) {
        this.validateType = validateType;
    }

    public String getError() {
        return error;
    }

    public void setError(String error) {
        this.error = error;
    }

    public String getExpression() {
        return expression;
    }

    public void setExpression(String expression) {
        this.expression = expression;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    public ArrayList<BaseDefinition> getChildren() {
        return children;
    }

    public void setChildren(ArrayList<BaseDefinition> children) {
        this.children = children;
    }

    @Override
    public boolean equals(Object o) {
        if (this == o) {
            return true;
        }
        if (!(o instanceof BaseDefinition)) {
            return false;
        }
        BaseDefinition that = (BaseDefinition) o;
        return required == that.required && Objects.equals(name, that.name) && Objects.equals(value, that.value) && Objects.equals(description, that.description) && dataType == that.dataType && Objects.equals(defaultValue, that.defaultValue) && Objects.equals(validateType, that.validateType) && Objects.equals(error, that.error) && Objects.equals(expression, that.expression) && Objects.equals(children, that.children);
    }

    @Override
    public int hashCode() {
        return Objects.hash(name, value, description, required, dataType, defaultValue, validateType, error, expression, children);
    }
}
